package com.itjin.service;

import com.itjin.model.domain.dto.ActivityCreateDTO;
import com.itjin.model.domain.dto.ActivityEditDTO;
import com.itjin.model.domain.dto.ActivityJoinDTO;
import com.itjin.model.domain.vo.ActivityDetailVO;
import com.itjin.model.domain.vo.ActivityListVO;
import com.itjin.model.result.PageResult;

import java.util.List;

/**
 * 校园活动服务接口
 */
public interface CampusActivityService {
    
    /**
     * 创建活动
     * @param activityCreateDTO 创建活动DTO
     * @return 活动详情
     */
    ActivityDetailVO createActivity(ActivityCreateDTO activityCreateDTO);
    
    /**
     * 编辑活动
     * @param activityEditDTO 编辑活动DTO
     * @return 活动详情
     */
    ActivityDetailVO editActivity(ActivityEditDTO activityEditDTO);
    
    /**
     * 删除活动
     * @param activityId 活动ID
     * @param operatorId 操作者ID
     * @return 删除结果
     */
    boolean deleteActivity(Integer activityId, Integer operatorId);
    
    /**
     * 获取活动详情
     * @param activityId 活动ID
     * @param userId 用户ID（用于判断是否已报名）
     * @return 活动详情
     */
    ActivityDetailVO getActivityDetail(Integer activityId, Integer userId);
    
    /**
     * 分页查询活动列表
     * @param activityType 活动类型（可选）
     * @param activityStatus 活动状态（可选）
     * @param current 当前页
     * @param size 每页大小
     * @return 分页结果
     */
    PageResult<ActivityListVO> getActivityList(Integer activityType, Integer activityStatus, 
                                             Long current, Long size);
    
    /**
     * 获取用户创建的活动列表
     * @param organizerId 举办人ID
     * @return 活动列表
     */
    List<ActivityListVO> getMyCreatedActivities(Integer organizerId);
    
    /**
     * 获取用户参与的活动列表
     * @param userId 用户ID
     * @return 活动列表
     */
    List<ActivityListVO> getMyJoinedActivities(Integer userId);
    
    /**
     * 参加活动
     * @param activityJoinDTO 参加活动DTO
     * @return 参加结果
     */
    boolean joinActivity(ActivityJoinDTO activityJoinDTO);
    
    /**
     * 退出活动
     * @param activityId 活动ID
     * @param userId 用户ID
     * @return 退出结果
     */
    boolean quitActivity(Integer activityId, Integer userId);
    
    /**
     * 获取热门活动列表
     * @param limit 限制数量
     * @return 活动列表
     */
    List<ActivityListVO> getPopularActivities(Integer limit);
    
    /**
     * 获取即将开始的活动列表
     * @return 活动列表
     */
    List<ActivityListVO> getUpcomingActivities();
    
    /**
     * 根据活动类型获取活动列表
     * @param activityType 活动类型
     * @param limit 限制数量
     * @return 活动列表
     */
    List<ActivityListVO> getActivitiesByType(Integer activityType, Integer limit);
} 